Erhöhter koffein-gehalt 20 mg/100ml


VFD clock

Vacuum fluorescent display with an ESP


🗓️ Created: 2025-08-21 | Modified: 2025-09-06

Resources

VFD from the front, one line showing a UNIX timestamp and another line showing a human readable datetime

Got an old VFD from a Point Of Sale device. The kind found in price tally displays in supermarkets.

It uses RS232 to communicate, so you need a TTL to RS232 converter for the display to recognise the signal from a micro controller. Which convents the ESPs from 3.3v logic -> -15 to 15 volt.

--> Attribution: oliver@labitat.dk made the hardware awesome <--


Circuit diagram

Link to circuit diagram - cirkitdesigner.com


Code

Link to code git repo

#include <FastLED.h>
#include <ESP8266WiFi.h>
#include <ezTime.h>

Timezone CopenhagenTime;

void setup() {
  Serial.begin(9600);

  Serial.write(0x0C); // Clear display
  Serial.print("VFD display\n");
  Serial.print("Starting\n");

  WiFi.setHostname(HOSTNAME);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

  Serial.write(0x0C); // Clear display
  Serial.printf("Hostname: %s\n", HOSTNAME);
  Serial.printf("Connecting to: %s\n", WIFI_SSID);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(1000);
    Serial.print('.');
  }

  Serial.write(0x0C); // Clear display
  Serial.println("Connected, IP address: ");
  Serial.println(WiFi.localIP());
  delay(1000);

  waitForSync();
  CopenhagenTime.setLocation("Europe/Copenhagen");

  Serial.write(0x0C); // Clear display
}

void loop() {
  // Get Unix epoch timestamp
  char buffer [3];
  sprintf(buffer,"%03d",ms());
  String milliEpoch = String(now()) + buffer;
  Serial.println(milliEpoch);

  delay(50);
  // https://github.com/ropg/ezTime#getting-date-and-time
  // 16;36;15 Sat 16 Aug 33
  String time_formatted = CopenhagenTime.dateTime("H:i:s D d M");
  Serial.println(time_formatted);

  events(); // Needed to update time continuously
}

Alternative input method

It's been suggested to me that one could possibly forgo the TTL to RS232 converter chip, since the VFD probably contains an RS232 to TTL convenrter anyways, worth exploring for another iteration.


Comments

INSERT INTO comment(nickname, visitor_url, contact, show_contact, comment, public) VALUES (
, , , , ,
);
(Will await approval before becoming public)

SELECT id, nickname, comment, page_url, visitor_url, (CASE WHEN show_contact THEN contact ELSE NULL END) as contact_info, created_at
FROM comment WHERE approved AND public AND page_url = '/VFD clock' ORDER BY created_at DESC;
*No comments*